// 字符串转base64
export function encode(str: string) {
	// 对字符串进行编码
	// var encode = encodeURI(str)
	// 对编码的字符串转化base64
	var base64 = btoa(encodeURIComponent(str));
	return base64;
}

// base64转字符串
export function decode(base64: string) {
	// 对base64转编码
	var decode = atob(base64);
	// 编码转字符串
	var str = decodeURIComponent(decode);
	return str;
}

export function showXml(str) {
	var text = str;

	// 去掉多余的空格
	text =
		'\n' +
		text
			.replace(/(<\w+)(\s.*?>)/g, function ($0, name, props) {
				return name + ' ' + props.replace(/\s+(\w+=)/g, ' $1');
			})
			.replace(/>\s*?</g, '>\n<');

	// 把注释编码
	text = text
		.replace(/\n/g, '\r')
		.replace(/<!--(.+?)-->/g, function ($0, text) {
			var ret = '<!--' + escape(text) + '-->';
			return ret;
		})
		.replace(/\r/g, '\n');

	// 调整格式
	var rgx = /\n(<(([^\?]).+?)(?:\s|\s*?>|\s*?(\/)>)(?:.*?(?:(?:(\/)>)|(?:<(\/)\2>)))?)/gm;
	var nodeStack = [];
	var output = text.replace(rgx, function ($0, all, name, isBegin, isCloseFull1, isCloseFull2, isFull1, isFull2) {
		var isClosed = isCloseFull1 == '/' || isCloseFull2 == '/' || isFull1 == '/' || isFull2 == '/';
		var prefix = '';
		if (isBegin == '!') {
			prefix = getPrefix(nodeStack.length);
		} else {
			if (isBegin != '/') {
				prefix = getPrefix(nodeStack.length);
				if (!isClosed) {
					nodeStack.push(name);
				}
			} else {
				nodeStack.pop();
				prefix = getPrefix(nodeStack.length);
			}
		}
		var ret = '\n' + prefix + all;
		return ret;
	});

	var prefixSpace = -1;
	var outputText = output.substring(1);

	// 把注释还原并解码，调格式
	outputText = outputText.replace(/\n/g, '\r').replace(/(\s*)<!--(.+?)-->/g, function ($0, prefix, text) {
		if (prefix.charAt(0) == '\r') {
			prefix = prefix.substring(1);
		}
		text = unescape(text).replace(/\r/g, '\n');
		var ret = '\n' + prefix + '<!--' + text.replace(/^\s*/gm, prefix) + '-->';
		return ret;
	});
	// alert(outputText);

	outputText = outputText.replace(/\s+$/g, '').replace(/\r/g, '\r\n');

	return outputText;
}

export function getPrefix(prefixIndex) {
	var span = '    ';
	var output = [];
	for (var i = 0; i < prefixIndex; ++i) {
		output.push(span);
	}

	return output.join('');
}
